package me.monster.smarttraffic.net;

import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import me.monster.smarttraffic.bo.BaseResponse;
import me.monster.smarttraffic.bo.BusDistance;
import me.monster.smarttraffic.bo.RoadLight;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;

/**
 * @description
 * @author: Created jiangjiwei in 2020-02-10 18:04
 */
public interface Api {

    /**
     * 道路列表信息
     *
     * @return 道路列表信息
     */
    @GET("/api/list/road")
    Observable<BaseResponse<List<String>>> listRoad();

    /**
     * 登录
     *
     * @param account
     * @param password
     * @return
     */
    @POST("/api/login")
    @FormUrlEncoded
    Observable<BaseResponse<Map<String, Object>>> login(@Field("account") String account,
                                                        @Field("password") String password);

    /**
     * 道路信息
     *
     * @return
     */
    @GET("/api/road/environment")
    Observable<BaseResponse<Map<String, String>>> roadEnvironment();

    /**
     * 公交距离站台信息
     *
     * @return
     */
    @GET("/api/car/bus/distance")
    Observable<BaseResponse<BusDistance>> busDistance();

    /**
     * 列出所有的车辆信息
     *
     * @return
     */
    @GET("/api/list/car")
    Observable<BaseResponse<List<String>>> listCar();

    /**
     * 查询小车账户
     *
     * @param no 小车编号
     * @return
     */
    @POST("/api/car/query")
    @FormUrlEncoded
    Observable<BaseResponse<Map<String, String>>> quryCar(@Field("carNo") String no);

    /**
     * 给小车充值
     *
     * @param no     小车编号
     * @param charge
     * @return
     */
    @POST("/api/car/charge")
    @FormUrlEncoded
    Observable<BaseResponse<Boolean>> chargeCar(@Field("carNo") String no,
                                                @Field("charge") String charge);

    /**
     * 停车场状态
     *
     * @return 具体哪个车位停车了
     */
    @GET("/api/parking/state")
    Observable<BaseResponse<Map<String, Boolean>>> parkingState();

    /**
     * 获取停车站费率
     *
     * @return
     */
    @GET("/api/parking/queryPrice")
    Observable<BaseResponse<String>> parkingPrice();

    /**
     * 设置停车场费率
     *
     * @param price
     * @return
     */
    @POST("/api/parking/setPrice")
    @FormUrlEncoded
    Observable<BaseResponse<Boolean>> setParkingPrice(@Field("price") String price);

    /**
     * 站台上公交距离
     *
     * @param stationNo 站台编号
     * @return
     */
    @POST("/api/bus/distance")
    @FormUrlEncoded
    Observable<BaseResponse<Map<String, Integer>>> busDistanceByStation(@Field("stationNo") int stationNo);

    /**
     * 获取站台环境数据
     *
     * @param stationNo
     * @return
     */
    @POST("/api/bus/environment")
    @FormUrlEncoded
    Observable<BaseResponse<Map<String, String>>> busEnvironmentByStation(@Field("stationNo") int stationNo);

    /**
     * 红路灯列表
     *
     * @return
     */
    @GET("/api/list/road/light")
    Observable<BaseResponse<List<RoadLight>>> listRoadLight();

    /**
     * 红绿灯排序规则列表
     *
     * @return
     */
    @GET("/api/list/road/light/rule")
    Observable<BaseResponse<List<String>>> listRoadLightRule();

    /**
     * 环境指标 - 空气
     *
     * @return
     */
    @GET("/api/env/air")
    Observable<BaseResponse<Map<String, Integer>>> envAir();

    /**
     * 环境指标 - 空气
     *
     * @return
     */
    @GET("/api/env/light")
    Observable<BaseResponse<Map<String, Integer>>> envLight();

}
